//
//  WBComposeTextView.swift
//  新浪微博
//
//  Created by 张甜甜 on 2017/12/14.
//  Copyright © 2017年 sweet. All rights reserved.
//

import UIKit
//撰写微博文本视图
class WBComposeTextView: UITextView {
    private lazy var placeLabel:UILabel = UILabel()
    override init(frame: CGRect, textContainer: NSTextContainer?) {
        super.init(frame: frame, textContainer: textContainer)
        setUPUi()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    deinit {
        NotificationCenter.default.removeObserver(self)
    }
}
//表情键盘方法
extension WBComposeTextView{
    //还要导入计算型属性
    //fixme
    func insertEmoticon(em:CZEmoticon?) {
        //em == nil 是删除按钮
        guard em != nil else {
            //删除文本
            self.deleteBackward()//删除背景选中的文字
            return
        }
        //emoji 字符串
        if let emoji = em?.emoji,let textRange = self.selectedTextRange {
            //插入emoji
            //UITextRange 仅用在此处
            //当前文本选中的范围
            self.replace(textRange, withText: emoji)
            return
        }
        //代码执行到此都是图片表情
        //获取表情中的图像属性文本
        //所有的排版系统中，插入的字符的显示，更随前一个字符属性
        guard let imageString = em?.imageText(font: self.font!) else {
            return
        }
        //        let imageText = NSMutableAttributedString(attributedString: imageString)
        //        //设置图像的文字属性
        //
        //        imageText.addAttributes([NSAttributedStringKey.font : textView.font!], range: NSRange(location: 0, length: 1))
        let imageText = em?.imageText(font: self.font!)
        //获取当前textView的属性文本 ->可变的
        let attrStrM = NSMutableAttributedString(attributedString: self.attributedText)
        //2将图像的属性文本插入到当前的光标位置
        attrStrM .replaceCharacters(in: self.selectedRange, with: imageText!)
        //重新设置属性文本
        //恢复光标位置
        let range = self.selectedRange
        
        self.attributedText =  attrStrM
        //length是选中字符的长度 插入文本之后应该为0
        self.selectedRange = NSRange(location: range.location + 1, length: 0)
        //让代理执行文本变化方法->在需要的时候通知代理执行协议方法
        delegate?.textViewDidChange?(self)
        //执行当前对象的文本变化方法
        textChanged()
    }
}
private extension WBComposeTextView{
    func setUPUi() {
        
        NotificationCenter.default.addObserver(self, selector: #selector(textChanged), name: NSNotification.Name.UITextViewTextDidChange, object: self)
        
        //设置站位标签
        placeLabel.text = "分享新鲜事..."
        placeLabel.font = UIFont.systemFont(ofSize: 15)
        placeLabel.textColor = UIColor.lightGray
        placeLabel.frame.origin = CGPoint(x: 5, y: 8)
        placeLabel.sizeToFit()
        addSubview(placeLabel)
    }
    @objc private func textChanged(){
    //如果有文本不显示占位文本 否则不显示
        placeLabel.isHidden = self.hasText
    }
}









